Upload package to PyPI By twine¶
設定(setup.py)¶
- いろいろ設定する
- DRYにしようとすると面倒
- setup.cfgはdistutils用っぽい
- 現在はsetuptoolが主流なので、便利と思って使ってはいけない
version¶
- めんどうなものの1つ
- ほかにはREADMEを読み込んでlong_descriptionに設定するもの
http://python-packaging-user-guide.readthedocs.org/en/latest/single_source_version/
uploadするファイルの準備¶
- source codeのtar ball
- userがbuildしなくて済むようにするwheel
なにを実行しているかわかりやすようにgrepしてみた。詳細は素の出力をみるとわかる
python setup.py sdist | grep running
running sdit
running egg_info
running check
python setup.py bdist_wheel | grep running
running bdist_wheel
running build
running build_py
running install
running install_lib
running install_egg_info
running egg_info
running install_scripts
成果物¶
- build
- ciserviceex.egg-info
- dist
確認¶
eff-infoのPKG_INFOを見ればsetup.pyの設定の反映を確認できる
dist¶
uploadするもの
tree dist
dist
├── ciserviceex-0.0.1-py2.py3-none-any.whl
└── ciserviceex-0.0.1.tar.gz
wheel¶
https://pypi.python.org/pypi/wheel
A wheel is a ZIP-format archive with a specially formatted filename and the .whl extension.
なので下記で確認できる
mkdir hoge && cd $_
unzip ../dist/ciserviceex-0.0.1-py2.py3-none-any.whl
Upload¶
アカウントの登録¶
https://pypi.python.org/pypi?%3Aaction=register_form
testpypi¶
- https://testpypi.python.org/pypi
- pypiのid/passは使えないのでアカウントはこれ用に登録する必要がある
twine¶
setup.pyだけでもPyPIへの登録はできるが、こちらを推奨しているようなので使ってみた。理由はgithubに書いてあった
- https://github.com/pypa/twine
- http://bugs.python.org/issue12226
install¶
pip install twine
.pypirc¶
pypi用の設定ファイル
https://wiki.python.org/moin/EnhancedPyPI
- 上記を見るとpypiだけでなく、ほかのServerを設定できるらしい
- 調べてみるとtest用のpypiがあった
- passwordが含まれるので、github等で公開している人はgitignoreに入れるなりしないと危ない
- もしくはpasswordの設定だけ書かない
- passwordを含めた設定は以下のとおり
cat << EOF > ~/.pypirc
[distutils]
index-servers=
pypi
test
[pypi]
repository = https://pypi.python.org/pypi
username = <xxx>
password = <xxx>
[test]
repository = https://testpypi.python.org/pypi
username = <xxx>
password = <xxx>
EOF
python -c "import distutils"
で一応使えるか確認しておいた
アカウント登録前¶
twine upload -r test dist/*
Uploading distributions to https://testpypi.python.org/pypi
Uploading ciserviceex-0.0.1-py2.py3-none-any.whl
HTTPError: 401 Client Error: You must be identified to edit package information for url: https://testpypi.python.org/pypi
アカウント登録後¶
twine upload -r test dist/*
Uploading distributions to https://testpypi.python.org/pypi
Uploading ciserviceex-0.0.1-py2.py3-none-any.whl
HTTPError: 403 Client Error: You are not allowed to edit 'ciserviceex' package information for url: https://testpypi.python.org/pypi
packageをProjectとして登録¶
- そもそもの使い方が違っていた
- https://github.com/pypa/twine/issues/21
twine register -r test dist/ciserviceex-0.0.1.tar.gz
Webブラウザでrepository URLにアクセスすると、右上のあたりにYour packages:が追加されている
pip install¶
-r test を消していままでの流れを実行すればpip install できるだろうけど、testpypiからインストールする方法を調べた
pip install -h
Package Index Options (including deprecated options):
-i, --index-url <url> Base URL of Python Package Index (default https://pypi.python.org/simple).
pip install -i https://testpypi.python.org/pypi ciserviceex
Collecting ciserviceex
Downloading https://testpypi.python.org/packages/py2.py3/c/ciserviceex/ciserviceex-0.0.1-py2.py3-none-any.whl
Installing collected packages: ciserviceex
Successfully installed ciserviceex-0.0.1
参考¶
- https://python-packaging-user-guide.readthedocs.org/en/latest/distributing/
- https://github.com/pypa/sampleproject
- https://pypi.python.org/pypi?%3Aaction=list_classifiers
- https://pythonhosted.org/an_example_pypi_project/setuptools.html
おまけ¶
uploadするということは事前にimportしてあげないといけないので、pathの通し方について出てきたリンクを貼っておく
- http://pythonhosted.org//setuptools/setuptools.html#development-mode
- http://stackoverflow.com/questions/19048732/python-setup-py-develop-vs-install
- https://mail.python.org/pipermail/distutils-sig/2014-April/024112.html